package com.starblink.android.common.view.expand;

public class ExpandTextView {
//    extends androidx.appcompat.widget.AppCompatTextView{
//    private String TEXT_EXPAND = "  [More]";
//    private Spannable SPAN_CLOSE;
//    private Spannable SPAN_EXPAND;
//    private String TEXT_CLOSE = "  [Show Less]";
//
//    public ExpandTextView(@NonNull Context context) {
//        super(context);
//    }
//
//    public ExpandTextView(@NonNull Context context, @Nullable AttributeSet attrs) {
//        super(context, attrs);
//    }
//
//    public ExpandTextView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
//        super(context, attrs, defStyleAttr);
//    }
//
//    CharSequence originText = "";
//    int mOpenHeight = 0;
//    int mCLoseHeight = 0;
//    int mMaxLines = 0;
//    int initWidth = 0;//初始宽度
//
//    @Override
//    public void setMaxLines(int maxLines) {
//        super.setMaxLines(maxLines);
//        mMaxLines = maxLines;
//    }
//
//    /**
//     * 暴露的方法-默认设置文本方法（如果需要折叠就会默认折叠）
//     * 如果有特殊的Span如话题之类的，需要处理完毕之后再调用此方法。
//     */
//    public void setCloseText(CharSequence text) {
//
//        if (SPAN_CLOSE == null) {
//            initCloseEnd();
//        }
//        boolean appendShowAll = false; // 需要展开收起功能，先使用flag拦截，等测量完毕之后再setText显示真正的文本
//        originText = text;
//
//        int maxLines = getMaxLines();
//
//        CharSequence workingText = originText;
//        if (maxLines >= 0) {
//
//            //创建出一个StaticLayout主要是为了计算行数
//            Layout layout = createStaticLayout(workingText);
//            //计算全部展开的文本高度
//            mOpenHeight = layout.getHeight() + getPaddingTop() + getPaddingBottom();
//            if (layout.getLineCount() > maxLines) {
//                //获取一行显示字符个数，然后截取字符串数， 收起状态原始文本截取展示的部分
//                workingText = originText.subSequence(0, layout.getLineEnd(maxLines - 1));
//                //再对加上[收起]标签的文本进行测量
//                String showText = originText.subSequence(0, layout.getLineEnd(maxLines - 1)) + "..." + SPAN_CLOSE;
//                Layout layout2 = createStaticLayout(showText);
//
//                // 对workingText进行-1截取，直到展示行数==最大行数，并且添加 SPAN_CLOSE 后刚好占满最后一行
//                while (layout2.getLineCount() > maxLines) {
//                    int lastSpace = workingText.length() - 1;
//                    if (lastSpace == -1) {
//                        break;
//                    }
//                    workingText = workingText.subSequence(0, lastSpace);
//                    layout2 = createStaticLayout(workingText + "..." + SPAN_CLOSE);
//                }
//
//                //计算收起的文本高度
//                mCLoseHeight = layout2.getHeight() + getPaddingTop() + getPaddingBottom();
//                appendShowAll = true;
//
//            }
//        }
//
//        setText(workingText);
//
//        if (appendShowAll) {
//            // 必须使用append，不能在上面使用+连接，否则会失效
//            append("...");
//            append(SPAN_CLOSE);
//        }
//
//        setMovementMethod(LinkMovementMethod.getInstance());
//
//        replaceUrlSpan();
//    }
//
//    /**
//     * 收起的文案(颜色处理)初始化
//     */
//    private void initCloseEnd() {
//        //设置展开的文本
////        SPAN_CLOSE = new SpannableString(TEXT_EXPAND);
////
////        ButtonSpan span = new ButtonSpan(getContext(), new View.OnClickListener() {
////            @Override
////            public void onClick(View v) {
////                ExpandTextView.super.setMaxLines(Integer.MAX_VALUE);
////                setExpandText(originText);
////                if (mCallback != null) mCallback.isExpand(1);
////            }
////        }, com.starblink.basic.style.R.color.sk_green50);
////
////        SPAN_CLOSE.setSpan(span, 0, TEXT_EXPAND.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
////        SPAN_CLOSE.setSpan(new MyTypefaceSpan(TypefaceUtil.getSFRegular(getContext())), 0, TEXT_EXPAND.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
//    }
//
//    /**
//     * 设置展开的文本展示-后面加上[收起]的文本标签
//     */
//    private void setExpandText(CharSequence text) {
//        if (SPAN_EXPAND == null) {
//            initExpandEnd();
//        }
//        //创建出一个StaticLayout主要是为了计算行数
//        Layout layout1 = createStaticLayout(text);
//        Layout layout2 = createStaticLayout(text + TEXT_CLOSE);
//        //判断- 当展示全部原始内容时 如果 TEXT_CLOSE 需要换行才能显示完整，则直接将TEXT_CLOSE展示在下一行
//        if (layout2.getLineCount() > layout1.getLineCount()) {
//            setText(originText + "\n");
//        } else {
//            setText(originText);
//        }
//        //加上[收起]的标签
//        append(SPAN_EXPAND);
//
//        setMovementMethod(LinkMovementMethod.getInstance());
//
//        replaceUrlSpan();
//    }
//
//    /**
//     * 展开的文案(颜色处理)初始化
//     */
//    private void initExpandEnd() {
//        //设置关闭的文本
//        SPAN_EXPAND = new SpannableString(TEXT_CLOSE);
////        ButtonSpan span = new ButtonSpan(getContext(), new View.OnClickListener() {
////            @Override
////            public void onClick(View v) {
////                ExpandTextView.super.setMaxLines(mMaxLines);
////                setCloseText(originText);
////                if (mCallback != null) mCallback.isExpand(0);
////            }
////        }, com.starblink.basic.style.R.color.sk_green50);
////
////        SPAN_EXPAND.setSpan(span, 0, TEXT_CLOSE.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
////        SPAN_EXPAND.setSpan(new MyTypefaceSpan(TypefaceUtil.getSFRegular(getContext())), 0, TEXT_CLOSE.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
//    }
//
//    /**
//     * 填充文本之后尝试替换URLSpan
//     */
//    private void replaceUrlSpan() {
//        CharSequence text = getText();
//        if (text instanceof Spannable) {
//            int end = text.length();
//            Spannable sp = (Spannable) text;
//
//            URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);
//            SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text);
//
//            if (urls.length > 0) {
//                for (URLSpan urlSpan : urls) {
//                    //拦截点击,替换Span
////                    InterceptUrlSpan interceptUrlSpan = new InterceptUrlSpan(urlSpan.getURL());
////                    spannableStringBuilder.setSpan(interceptUrlSpan, sp.getSpanStart(urlSpan), sp.getSpanEnd(urlSpan), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//                }
//
//                //替换之后重新设置进去
//                setText(spannableStringBuilder);
//            }
//
//        }
//    }
//
//    public void initWidth(int mTvWidth) {
//        this.initWidth = mTvWidth;
//    }
//
//
//    public interface OnTopicClickListener {
//        void onTopicClick(String charSequence);
//    }
//
//    /**
//     * 暴露方法-替换原文本中的话题数据，变色处理
//     *
//     * @param topics  服务器返回的话题数据
//     * @param content 服务器返回的原始文本数据
//     */
//    public CharSequence replaceTopicSpan(List<PostD.AccountHashtagList> topics, String content, OnTopicClickListener listener) {
//
//        if (!CheckUtil.isEmpty(topics) && !CheckUtil.isEmpty(content)) {
//
//            CharSequence topicCharSequece = content;
//
//            int startPosition = 0;
//            int endPosition;
//            for (PostD.AccountHashtagList bean : topics) {
//                startPosition = content.indexOf(bean.getName(), startPosition);
//                endPosition = startPosition + bean.getName().length();
//                if (startPosition == -1)
//                    break;
//
//                topicCharSequece = SpanUtils.getInstance()
//                        .toClickSpan(topicCharSequece, startPosition, endPosition, CommUtils.getColor(com.starblink.basic.style.R.color.sk_red50), false, charSequence -> {
//                            //话题的点击(路由直接跳转搜索结果展示)
//                            listener.onTopicClick(charSequence.toString());
//
//                        });
//
//                startPosition = endPosition;
//            }
//
//            return topicCharSequece;
//        }
//
//        return "";
//    }
//
//    private Layout createStaticLayout(CharSequence workingText) {
//        return new StaticLayout(workingText, getPaint(), initWidth - getPaddingLeft() - getPaddingRight(),
//                Layout.Alignment.ALIGN_NORMAL, getLineSpacingMultiplier(), getLineSpacingExtra(), false);
//    }
//
//    private Animation mOpenAnim, mCloseAnim;
//    private SpannableStringBuilder mOpenSpannableStr, mCloseSpannableStr;
//    private void executeOpenAnim() {
//
//        if (mOpenAnim == null) {
//            mOpenAnim = new ExpandCollapseAnimation(this, mCLoseHeight, mOpenHeight);
//            mOpenAnim.setFillAfter(true);
//            mOpenAnim.setAnimationListener(new Animation.AnimationListener() {
//                @Override
//                public void onAnimationStart(Animation animation) {
//                    ExpandableTextView.super.setMaxLines(Integer.MAX_VALUE);
//                    setText(mOpenSpannableStr);
//                }
//
//                @Override
//                public void onAnimationEnd(Animation animation) {
//
//                    getLayoutParams().height = mOpenHeight;
//                    requestLayout();
//                    animating = false;
//                }
//
//                @Override
//                public void onAnimationRepeat(Animation animation) {
//
//                }
//            });
//        }
//
//        if (animating) {
//            return;
//        }
//        animating = true;
//        clearAnimation();
//
//        startAnimation(mOpenAnim);
//    }
//
//
//    private void executeCloseAnim() {
//
//        if (mCloseAnim == null) {
//            mCloseAnim = new ExpandCollapseAnimation(this, mOpenHeight, mCLoseHeight);
//            mCloseAnim.setFillAfter(true);
//            mCloseAnim.setAnimationListener(new Animation.AnimationListener() {
//                @Override
//                public void onAnimationStart(Animation animation) {
//
//                }
//
//                @Override
//                public void onAnimationEnd(Animation animation) {
//                    animating = false;
//                    ExpandableTextView.super.setMaxLines(mMaxLines);
//                    setText(mCloseSpannableStr);
//                    getLayoutParams().height = mCLoseHeight;
//                    requestLayout();
//                }
//
//                @Override
//                public void onAnimationRepeat(Animation animation) {
//
//                }
//            });
//        }
//
//        if (animating) {
//            return;
//        }
//        animating = true;
//        clearAnimation();
//
//        startAnimation(mCloseAnim);
//    }

}
